package com.crm.service;

import com.crm.dao.ICustomerDao;
import com.crm.model.Customer;
import com.crm.model.User;

import java.util.List;
import java.util.Date;

/**
 * @author <a href="mailto:huang0510@hotmail.com">HuangHuang</a>
 * @version $Id$
 */
public interface ICustomerService {

    /**
     * 增加一个新客户。
     *
     * @param customer 客户信息实体。
     */
    void create(Customer customer);

    /**
     * 更新客户信息。
     *
     * @param customer 客户信息实体。
     */
    void update(Customer customer);

    /**
     * 获取客户信息列表。
     *
     * @return 客户信息列表
     */
    List getCustomers();

    /**
     * 检查要录入的客户名称是否已经存在。
     *
     * @param inputName 录入的客户名称。
     * @return 返回已经存在的客户名称，否则返回null。
     */
    String getSameName(String inputName);

    /**
     * 检查要录入的客户名称是否已经存在。排除指定ID的记录。
     *
     * @param id 客户记录id。
     * @param name 客户名称
     * @return 返回已经存在的客户名称，否则返回null。
     */
    String getSameNameExcludeSelf(String id, String name);

    /**
     * 获取指定客户的信息。
     *
     * @param customerId 客户ID
     * @return 返回客户信息
     */
    Customer getCustomerById(String customerId);

    /**
     * 获取与指定用户相关的客户信息。
     *
     * @param user 用户信息
     * @return 返回与客户相关的客户信息列表
     */
    List getCustomers(User user);

    /**
     * 获取本周的客户信息列表。
     *
     * @param user 用户
     * @return 返回客户信息列表。
     */
    List getCustomerThisWeek(User user);

    /**
     * 获取上周的客户信息列表。
     *
     * @param user 用户
     * @return 返回客户信息列表。
     */
    List getCustomerLastWeek(User user);

    /**
     * 检索给定关键字并与指定用户相关的客户信息。
     * 数组应该包含两个字符串，第一个字符串表示检索关键字，第二个字符串表示检索字段。
     *
     * @param user         用户信息
     * @param searchParams 检索关键字.
     * @param dates  开始日期和结束日期
     * @return 返回检索到的客户信息
     */
    List getCustomers(User user, String[] searchParams, Date[] dates);

    /**
     * 删除指定的客户
     *
     * @param customer 客户
     */
    void delete(Customer customer, User user);

    /**
     * 获得已保存的客户数据中与指定的网址相同的网址。忽略大小写。
     *
     * @param website 网址
     * @return 返回已经存在的同名网址。
     */
    String getSameWebsite(String website);

    String getSameWebsiteExcludeSelf(String id, String website);

    List getRecycleCust(String uid);
}
